Supplement 2:
I use the following API to get the keychain search list.
When my app is restarted by the system, "Domain User Search List" is empty.
So I can't find Certificate.
CFArrayRef debugSearchList = NULL;
OSStatus debugStatus = SecKeychainCopySearchList(&debugSearchList);
LOGD(@"[DEBUG] %d CopySearchList = %@", debugStatus, debugSearchList);
CFArrayRef searchList = NULL;
OSStatus statusDomainUser = SecKeychainCopyDomainSearchList(kSecPreferencesDomainUser, &searchList);
LOGD(@"Copy kSecPreferencesDomainUser SearchList (%d) = %@", statusDomainUser, searchList);
Normal
[DEBUG] 0 CopySearchList = (
"<SecKeychain 0x7f99b7d28280 [0x7fff8076db70]>",
"<SecKeychain 0x7f99b7d289b0 [0x7fff8076db70]>",
"<SecKeychain 0x7f99b7d291f0 [0x7fff8076db70]>"
)
Copy kSecPreferencesDomainUser SearchList = (
"<SecKeychain 0x7f99b7d28280 [0x7fff8076db70]>"
)
Restarted by the system
[DEBUG] 0 CopySearchList = (
"<SecKeychain 0x7fac7f529190 [0x7fff8076db70]>",
"<SecKeychain 0x7fac7f5298c0 [0x7fff8076db70]>"
)
Copy kSecPreferencesDomainUser SearchList = (
)